home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
dev
/
gcc
/
inline_retina.lha
/
inline-retina.h
Wrap
C/C++ Source or Header
|
1993-05-27
|
19KB
|
553 lines
/* This is an inline header for programming the Retina Graphics card with */
/* GCC It is posted to 'alt.sources.amiga' as it is basically untested. */
/* You still need to include the "retina/retina.h" file in your source */
/* before including this inline header. The Retina Board comes with */
/* developer software in every package. Thank you MacroSystem! */
/*
* <inline/retina.h> $VER: 1.2 (26-5-93) ALPHA
* generated by EDB 5-26-93 from version 1.2 retina_lib.fd
* notes: This was created by hacking retina_lib.fd and retina_protos.h
* until they worked properly with the conv.p perl script
* distributed in Markus Wild's GCC 2.3.3 port to Amiga OS
* The fd file was used as the arbiter when conflicts arose.
* General problems were upper case register names: use a0 not A0...
* FD functions had less parameters than the PROTOS. Huh??????
* This worked with the 'demo' program that was posted to
* comp.sys.amiga.programmer, and that is as far as I've tested it.
* Install in your gcc:os-include/inline directory, and use this
* instead of the 'pragmas' and 'clib/protos' include files
*/
#ifndef _RETINA_PROTOS_H
#define _RETINA_PROTOS_H
#include <sys/cdefs.h>
#include <inline/stubs.h>
__BEGIN_DECLS
#ifndef BASE_EXT_DECL
#define BASE_EXT_DECL extern struct Library * RetinaBase;
#endif
#ifndef BASE_PAR_DECL
#define BASE_PAR_DECL
#define BASE_PAR_DECL0 void
#endif
#ifndef BASE_NAME
#define BASE_NAME RetinaBase
#endif
static __inline UBYTE *
Retina_AllocBitMap (BASE_PAR_DECL UWORD width,UWORD height,
UWORD bytesPerPixel,ULONG flags)
{
BASE_EXT_DECL
register UBYTE * _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register UWORD d0 __asm("d0") = width;
register UWORD d1 __asm("d1") = height;
register UWORD d2 __asm("d2") = bytesPerPixel;
register ULONG d3 __asm("d3") = flags;
__asm __volatile ("jsr a6@(-0xde)"
: "=r" (_res)
: "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
: "a0","a1","d0","d1","d2","d3", "memory");
return _res;
}
static __inline ULONG
Retina_AvailMem (BASE_PAR_DECL ULONG flags)
{
BASE_EXT_DECL
register ULONG _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register ULONG d0 __asm("d0") = flags;
__asm __volatile ("jsr a6@(-0xea)"
: "=r" (_res)
: "r" (a6), "r" (d0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline void
Retina_Circle (BASE_PAR_DECL struct RetinaScreen *screen,
UWORD x,UWORD y,UWORD r)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x;
register UWORD d1 __asm("d1") = y;
register UWORD d2 __asm("d2") = r;
__asm __volatile ("jsr a6@(-0x108)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
: "a0","a1","d0","d1","d2", "memory");
}
static __inline void
Retina_ClearScreen (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0xf0)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_CloseScreen (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0xc0)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_CopyRect (BASE_PAR_DECL struct RetinaScreen *srcScreen,UWORD srcX,
UWORD srcY,struct RetinaScreen *destScreen,UWORD destX,
UWORD destY,UWORD sizeX,UWORD sizeY)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = srcScreen;
register UWORD d0 __asm("d0") = srcX;
register UWORD d1 __asm("d1") = srcY;
register struct RetinaScreen *a1 __asm("a1") = destScreen;
register UWORD d2 __asm("d2") = destX;
register UWORD d3 __asm("d3") = destY;
register UWORD d4 __asm("d4") = sizeX;
register UWORD d5 __asm("d5") = sizeY;
__asm __volatile ("jsr a6@(-0x14a)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1), "r" (d2), "r" (d3), \
"r" (d4), "r" (d5)
: "a0","a1","d0","d1","d2","d3","d4","d5", "memory");
}
static __inline void
Retina_DisownRetina (BASE_PAR_DECL0)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
__asm __volatile ("jsr a6@(-0x168)"
: /* no output */
: "r" (a6)
: "a0","a1","d0","d1", "memory");
}
static __inline struct RetinaMonitor *
Retina_FindMonitor (BASE_PAR_DECL ULONG monitorID)
{
BASE_EXT_DECL
register struct RetinaMonitor * _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register ULONG d0 __asm("d0") = monitorID;
__asm __volatile ("jsr a6@(-0xae)"
: "=r" (_res)
: "r" (a6), "r" (d0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline void
Retina_FreeBitMap (BASE_PAR_DECL UBYTE *bitmap)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register UBYTE *a0 __asm("a0") = bitmap;
__asm __volatile ("jsr a6@(-0xe4)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline ULONG
Retina_GetAPen (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register ULONG _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0x132)"
: "=r" (_res)
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline ULONG
Retina_GetDefaultScreenInfo (BASE_PAR_DECL ULONG defaultID,
struct DefaultScreenInfo * buffer)
{
BASE_EXT_DECL
register ULONG _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register ULONG d0 __asm("d0") = defaultID;
register struct DefaultScreenInfo * a0 __asm("a0") = buffer;
__asm __volatile ("jsr a6@(-0x5a)"
: "=r" (_res)
: "r" (a6), "r" (d0), "r" (a0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline void
Retina_Line (BASE_PAR_DECL struct RetinaScreen *screen,
UWORD x1,UWORD y1,UWORD x2,UWORD y2)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x1;
register UWORD d1 __asm("d1") = y1;
register UWORD d2 __asm("d2") = x2;
register UWORD d3 __asm("d3") = y2;
__asm __volatile ("jsr a6@(-0x10e)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
: "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_LoadPalette (BASE_PAR_DECL struct RetinaScreen *screen,
UWORD first,UWORD count,UBYTE *table)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = first;
register UWORD d1 __asm("d1") = count;
register UBYTE *a1 __asm("a1") = table;
__asm __volatile ("jsr a6@(-0x8a)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_MoveSprite (BASE_PAR_DECL struct RetinaScreen *screen,
UWORD x,UWORD y)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x;
register UWORD d1 __asm("d1") = y;
__asm __volatile ("jsr a6@(-0x126)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1)
: "a0","a1","d0","d1", "memory");
}
static __inline struct RetinaMonitor *
Retina_NextMonitor (BASE_PAR_DECL struct RetinaMonitor *monitor)
{
BASE_EXT_DECL
register struct RetinaMonitor * _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaMonitor *a0 __asm("a0") = monitor;
__asm __volatile ("jsr a6@(-0xb4)"
: "=r" (_res)
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline struct RetinaScreen *
Retina_OpenScreen (BASE_PAR_DECL UWORD width,UWORD height,
ULONG monitorID,ULONG flags,APTR tags)
{
BASE_EXT_DECL
register struct RetinaScreen * _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register UWORD d0 __asm("d0") = width;
register UWORD d1 __asm("d1") = height;
register ULONG d2 __asm("d2") = monitorID;
register ULONG d3 __asm("d3") = flags;
register APTR a0 __asm("a0") = tags;
__asm __volatile ("jsr a6@(-0xba)"
: "=r" (_res)
: "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a0)
: "a0","a1","d0","d1","d2","d3", "memory");
return _res;
}
static __inline void
Retina_OwnRetina (BASE_PAR_DECL0)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
__asm __volatile ("jsr a6@(-0x162)"
: /* no output */
: "r" (a6)
: "a0","a1","d0","d1", "memory");
}
static __inline ULONG
Retina_ReadPixel (BASE_PAR_DECL struct RetinaScreen *screen,
UWORD x,UWORD y)
{
BASE_EXT_DECL
register ULONG _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x;
register UWORD d1 __asm("d1") = y;
__asm __volatile ("jsr a6@(-0x138)"
: "=r" (_res)
: "r" (a6), "r" (a0), "r" (d0), "r" (d1)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline void
Retina_ReadRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register UBYTE *a0 __asm("a0") = mem;
register UWORD d0 __asm("d0") = memX;
register UWORD d1 __asm("d1") = memY;
register UWORD d2 __asm("d2") = memWidth;
register ULONG d3 __asm("d3") = mode;
register struct RetinaScreen *a1 __asm("a1") = screen;
register UWORD d4 __asm("d4") = screenX;
register UWORD d5 __asm("d5") = screenY;
register UWORD d6 __asm("d6") = sizeX;
register UWORD d7 __asm("d7") = sizeY;
register UBYTE *a2 __asm("a2") = mem2;
__asm __volatile ("jsr a6@(-0x144)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1), \
"r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
: "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
static __inline void
Retina_RectFill (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x1,UWORD y1,
UWORD x2,UWORD y2)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x1;
register UWORD d1 __asm("d1") = y1;
register UWORD d2 __asm("d2") = x2;
register UWORD d3 __asm("d3") = y2;
__asm __volatile ("jsr a6@(-0xf6)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
: "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_ScreenToBack (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0x114)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_ScreenToFront (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0xc6)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetAPen (BASE_PAR_DECL struct RetinaScreen *screen,ULONG color)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register ULONG d0 __asm("d0") = color;
__asm __volatile ("jsr a6@(-0xfc)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetDrMd (BASE_PAR_DECL struct RetinaScreen *screen,ULONG mode)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register ULONG d0 __asm("d0") = mode;
__asm __volatile ("jsr a6@(-0x15c)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetPalette (BASE_PAR_DECL struct RetinaScreen *screen,UWORD index,
UBYTE red,UBYTE green,UBYTE blue)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = index;
register UBYTE d1 __asm("d1") = red;
register UBYTE d2 __asm("d2") = green;
register UBYTE d3 __asm("d3") = blue;
__asm __volatile ("jsr a6@(-0x90)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
: "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_SetPixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,
UWORD y,ULONG color)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x;
register UWORD d1 __asm("d1") = y;
register ULONG d2 __asm("d2") = color;
__asm __volatile ("jsr a6@(-0x156)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
: "a0","a1","d0","d1","d2", "memory");
}
static __inline UBYTE *
Retina_SetSegmentPtr (BASE_PAR_DECL UBYTE *address)
{
BASE_EXT_DECL
register UBYTE * _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register UBYTE *a0 __asm("a0") = address;
__asm __volatile ("jsr a6@(-0x96)"
: "=r" (_res)
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
return _res;
}
static __inline ULONG
Retina_SetSprite (BASE_PAR_DECL struct RetinaScreen *screen,ULONG *data,
UWORD height,APTR tags)
{
BASE_EXT_DECL
register ULONG _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register ULONG *a1 __asm("a1") = data;
register UWORD d0 __asm("d0") = height;
register APTR a2 __asm("a2") = tags;
__asm __volatile ("jsr a6@(-0x120)"
: "=r" (_res)
: "r" (a6), "r" (a0), "r" (a1), "r" (d0), "r" (a2)
: "a0","a1","a2","d0","d1", "memory");
return _res;
}
static __inline void
Retina_SpriteFunction (BASE_PAR_DECL struct RetinaScreen *screen,APTR tags)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register APTR a1 __asm("a1") = tags;
__asm __volatile ("jsr a6@(-0x12c)"
: /* no output */
: "r" (a6), "r" (a0), "r" (a1)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SwapBitMap (BASE_PAR_DECL struct RetinaScreen *screen)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
__asm __volatile ("jsr a6@(-0x11a)"
: /* no output */
: "r" (a6), "r" (a0)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SwapRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
UWORD memWidth,ULONG mode,struct RetinaScreen *screen,UWORD
screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register UBYTE *a0 __asm("a0") = mem;
register UWORD d0 __asm("d0") = memX;
register UWORD d1 __asm("d1") = memY;
register UWORD d2 __asm("d2") = memWidth;
register ULONG d3 __asm("d3") = mode;
register struct RetinaScreen *a1 __asm("a1") = screen;
register UWORD d4 __asm("d4") = screenX;
register UWORD d5 __asm("d5") = screenY;
register UWORD d6 __asm("d6") = sizeX;
register UWORD d7 __asm("d7") = sizeY;
register UBYTE *a2 __asm("a2") = mem2;
__asm __volatile ("jsr a6@(-0x150)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
"r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
: "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
static __inline BOOL
Retina_WriteBitMap (BASE_PAR_DECL struct RetinaScreen *screen,
struct BitMap *bitmap,UBYTE *palette,UWORD destX,
UWORD destY,UWORD width,ULONG mode)
{
BASE_EXT_DECL
register BOOL _res __asm("d0");
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register struct BitMap *a1 __asm("a1") = bitmap;
register UBYTE *a2 __asm("a2") = palette;
register UWORD d0 __asm("d0") = destX;
register UWORD d1 __asm("d1") = destY;
register UWORD d2 __asm("d2") = width;
register ULONG d3 __asm("d3") = mode;
__asm __volatile ("jsr a6@(-0x36)"
: "=r" (_res)
: "r" (a6), "r" (a0), "r" (a1), "r" (a2), "r" (d0), "r" (d1),\
"r" (d2), "r" (d3)
: "a0","a1","a2","d0","d1","d2","d3", "memory");
return _res;
}
static __inline void
Retina_WritePixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,UWORD y)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register struct RetinaScreen *a0 __asm("a0") = screen;
register UWORD d0 __asm("d0") = x;
register UWORD d1 __asm("d1") = y;
__asm __volatile ("jsr a6@(-0x102)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1)
: "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_WriteRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
BASE_EXT_DECL
register struct Library *a6 __asm("a6") = BASE_NAME;
register UBYTE *a0 __asm("a0") = mem;
register UWORD d0 __asm("d0") = memX;
register UWORD d1 __asm("d1") = memY;
register UWORD d2 __asm("d2") = memWidth;
register ULONG d3 __asm("d3") = mode;
register struct RetinaScreen *a1 __asm("a1") = screen;
register UWORD d4 __asm("d4") = screenX;
register UWORD d5 __asm("d5") = screenY;
register UWORD d6 __asm("d6") = sizeX;
register UWORD d7 __asm("d7") = sizeY;
register UBYTE *a2 __asm("a2") = mem2;
__asm __volatile ("jsr a6@(-0x13e)"
: /* no output */
: "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
"r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
: "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
#undef BASE_EXT_DECL
#undef BASE_PAR_DECL
#undef BASE_PAR_DECL0
#undef BASE_NAME
__END_DECLS
#endif /* _RETINA_PROTOS_H */